package maple.thelittleredbook.interaction.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import maple.thelittleredbook.interaction.entity.UserBehavior;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;

/**
 * 用户行为Mapper接口
 * 负责用户行为记录和内容统计更新
 */
@Mapper
public interface UserBehaviorMapper extends BaseMapper<UserBehavior> {

    /**
     * 原子性更新内容浏览量
     *
     * @param contentId 内容ID
     * @return 更新的记录数
     */
    @Update("UPDATE contents SET view_count = view_count + 1, updated_at = NOW() " +
            "WHERE id = #{contentId}")
    int updateContentViewCount(@Param("contentId") Long contentId);

    /**
     * 原子性更新内容点赞数（增加）
     *
     * @param contentId 内容ID
     * @return 更新的记录数
     */
    @Update("UPDATE contents SET like_count = like_count + 1, updated_at = NOW() " +
            "WHERE id = #{contentId}")
    int updateContentLikeCount(@Param("contentId") Long contentId);

    /**
     * 原子性更新内容点赞数（减少）
     *
     * @param contentId 内容ID
     * @return 更新的记录数
     */
    @Update("UPDATE contents SET like_count = like_count - 1, updated_at = NOW() " +
            "WHERE id = #{contentId} AND like_count > 0")
    int updateContentLikeCountDecrement(@Param("contentId") Long contentId);

    /**
     * 原子性更新内容评论量
     *
     * @param contentId 内容ID
     * @return 更新的记录数
     */
    @Update("UPDATE contents SET comment_count = comment_count + 1, updated_at = NOW() " +
            "WHERE id = #{contentId}")
    int updateContentCommentCount(@Param("contentId") Long contentId);

    /**
     * 原子性更新评论点赞数（增加）
     *
     * @param commentId 评论ID
     * @return 更新的记录数
     */
    @Update("UPDATE comments SET like_count = like_count + 1, updated_at = NOW() " +
            "WHERE id = #{commentId}")
    int updateCommentLikeCount(@Param("commentId") Long commentId);

    /**
     * 原子性更新评论点赞数（减少）
     *
     * @param commentId 评论ID
     * @return 更新的记录数
     */
    @Update("UPDATE comments SET like_count = like_count - 1, updated_at = NOW() " +
            "WHERE id = #{commentId} AND like_count > 0")
    int updateCommentLikeCountDecrement(@Param("commentId") Long commentId);
}